有时候,使用命令行工具才是最适当的,例如对JVM执行一些批处理命令,又或者受操作环境限制,只能通过SSH执行有限的命令。总体来说,JRCMD这款小巧强大的工具非常适合给运行在本地的JRockit JVM发送相关指令。
直接运行JRCMD,不附带任何参数的话,会列出当前系统中正在运行的JVM,显示结果包括系统进程ID和启动Java应用程序的主类,如下所示;
C:\>JROCKIT_HOME\bin\jrcmd
2416 com.jrockit.mc.rcp.start.MCMain
19344 jrockit.tools.jrcmd.JrCmd
在上面的示例中,列出了两个当前正在运行的JVM实例,分别是JRockit Mission Control和JRCMD自身。
若想对给JVM发送指令,则可以将进程号(PID)作为第一个参数传给JRCMD。若是将0作为PID传给JRCMD的话,则JRCMD会在它所能找到的所有正在运行的JVM上执行目标命令。由于系统中可能同时运行了多个版本的JRockit JVM,而且其所支持的命令集合也未必相同,则以0作为PID时,某些命令可能无法起效。因此,一般情况下,会对指定的PID发送命令。另外需要注意的是,依据不同的命令函参数和配置选项,即便是相同版本的JRockit JVM,也可能会支持不同的命令集合。
要想查看目标JRockit实例所支持的命令列表,可以使用JRCMD的help命令:
C:\>JROCKIT_HOME\bin\jrcmd 2416 help
2416:
The following commands are available:
kill_management_server
start_management_server
print_object_summary
memleakserver
...
For more information about a specific command use 'help <command>'.
Parameters to commands are optional unless otherwise stated.
在后续的示例中,会假设用于已经将$JROCKIT_HOME/bin目录添加到操作系统的PATH变量中。
JRCMD支持的命令一般被称为 JRockit Diagnostic Commands,可以通过 JRockit Management API(JMAPI)或自定义 JRockit JMX MBeans(JMXMAPI)来访问。
诊断命令有多种使用方面,JMAPI和JMXMAPI可以在Java中以编程的方式调用,在第12章 JRockit Management API中会对此作详细介绍。